package nodos;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

public class NodoListaSentencias extends Nodo {

	private NodoListaSentencias listaSentencias;
	private Nodo decisionSi;
	private Nodo desdeHasta;
	private Nodo sentencia;

	public NodoListaSentencias(NodoListaSentencias listaSentencias,Nodo decisionSi, Nodo desdeHasta,Nodo sentencia) {
		this.listaSentencias = listaSentencias;
		this.decisionSi = decisionSi;
		this.desdeHasta = desdeHasta;
		this.sentencia = sentencia;
	}

	@Override
	public DefaultMutableTreeNode getSubArbolVisual() {
		DefaultMutableTreeNode raiz=new DefaultMutableTreeNode("Lista de Sentencias");
		if(decisionSi!=null)
			raiz.add((decisionSi.getSubArbolVisual()));
		if(desdeHasta!=null)
			raiz.add((desdeHasta.getSubArbolVisual()));
		if(sentencia!=null)
			raiz.add((sentencia.getSubArbolVisual()));
		ArrayList<Nodo> sentencias=obtenerSentencias();
		if(sentencias.size()!=0)
			for (Nodo sentencia : sentencias) {
				raiz.add(sentencia.getSubArbolVisual());
			}
		return raiz;
	}

	private ArrayList<Nodo> obtenerSentencias(){
		ArrayList<Nodo> sentencias=new ArrayList<Nodo>();
		guardarSentencias(sentencias, listaSentencias);
		return sentencias;
	}
	private void guardarSentencias(ArrayList<Nodo> sentencias,NodoListaSentencias raizSubArbol){
		if(raizSubArbol==null)
			return;
		else{
			if(raizSubArbol.decisionSi!=null)
				sentencias.add(raizSubArbol.decisionSi);
			if(raizSubArbol.desdeHasta!=null)
				sentencias.add(raizSubArbol.desdeHasta);
			if(raizSubArbol.sentencia!=null)
				sentencias.add(raizSubArbol.sentencia);
			guardarSentencias(sentencias, raizSubArbol.listaSentencias);
		}
	}

	@Override
	public String traducir(int profundidad) {
		String tabs="";
		for (int i = 0; i < profundidad; i++) tabs+="\t";
		String codJava=tabs;
		if(decisionSi!=null)
			codJava+=decisionSi.traducir(profundidad);
		if(desdeHasta!=null)
			codJava+=desdeHasta.traducir(profundidad);
		if(sentencia!=null)
			codJava+=sentencia.traducir(profundidad)+";\n";
		if(listaSentencias!=null)
			codJava+=listaSentencias.traducir(profundidad);
		return codJava;
	}
}
